'use strict'
var t = require('fs'),
	r = require('path')
function e(t) {
	return t && 'object' == typeof t && 'default' in t ? t : { default: t }
}
var n = e(t),
	o = e(r),
	i = 'undefined' != typeof globalThis ? globalThis : 'undefined' != typeof window ? window : 'undefined' != typeof global ? global : 'undefined' != typeof self ? self : {}
var u = (function (t) {
	var r = { exports: {} }
	return t(r, r.exports), r.exports
})(function (t, r) {
	var e = '__lodash_hash_undefined__',
		n = 9007199254740991,
		o = '[object Arguments]',
		u = '[object Function]',
		c = '[object Object]',
		a = /^\[object .+?Constructor\]$/,
		f = /^(?:0|[1-9]\d*)$/,
		s = {}
	;(s['[object Float32Array]'] =
		s['[object Float64Array]'] =
		s['[object Int8Array]'] =
		s['[object Int16Array]'] =
		s['[object Int32Array]'] =
		s['[object Uint8Array]'] =
		s['[object Uint8ClampedArray]'] =
		s['[object Uint16Array]'] =
		s['[object Uint32Array]'] =
			!0),
		(s[o] =
			s['[object Array]'] =
			s['[object ArrayBuffer]'] =
			s['[object Boolean]'] =
			s['[object DataView]'] =
			s['[object Date]'] =
			s['[object Error]'] =
			s[u] =
			s['[object Map]'] =
			s['[object Number]'] =
			s[c] =
			s['[object RegExp]'] =
			s['[object Set]'] =
			s['[object String]'] =
			s['[object WeakMap]'] =
				!1)
	var l = 'object' == typeof i && i && i.Object === Object && i,
		h = 'object' == typeof self && self && self.Object === Object && self,
		p = l || h || Function('return this')(),
		_ = r && !r.nodeType && r,
		v = _ && t && !t.nodeType && t,
		d = v && v.exports === _,
		y = d && l.process,
		g = (function () {
			try {
				var t = v && v.require && v.require('util').types
				return t || (y && y.binding && y.binding('util'))
			} catch (t) {}
		})(),
		b = g && g.isTypedArray
	function j(t, r, e) {
		switch (e.length) {
			case 0:
				return t.call(r)
			case 1:
				return t.call(r, e[0])
			case 2:
				return t.call(r, e[0], e[1])
			case 3:
				return t.call(r, e[0], e[1], e[2])
		}
		return t.apply(r, e)
	}
	var w,
		O,
		m,
		A = Array.prototype,
		z = Function.prototype,
		M = Object.prototype,
		x = p['__core-js_shared__'],
		C = z.toString,
		F = M.hasOwnProperty,
		U = (w = /[^.]+$/.exec((x && x.keys && x.keys.IE_PROTO) || '')) ? 'Symbol(src)_1.' + w : '',
		S = M.toString,
		I = C.call(Object),
		P = RegExp(
			'^' +
				C.call(F)
					.replace(/[\\^$.*+?()[\]{}|]/g, '\\$&')
					.replace(/hasOwnProperty|(function).*?(?=\\\()| for .+?(?=\\\])/g, '$1.*?') +
				'$'
		),
		T = d ? p.Buffer : void 0,
		q = p.Symbol,
		E = p.Uint8Array,
		$ = T ? T.allocUnsafe : void 0,
		D =
			((O = Object.getPrototypeOf),
			(m = Object),
			function (t) {
				return O(m(t))
			}),
		k = Object.create,
		B = M.propertyIsEnumerable,
		N = A.splice,
		L = q ? q.toStringTag : void 0,
		R = (function () {
			try {
				var t = vt(Object, 'defineProperty')
				return t({}, '', {}), t
			} catch (t) {}
		})(),
		G = T ? T.isBuffer : void 0,
		V = Math.max,
		W = Date.now,
		H = vt(p, 'Map'),
		J = vt(Object, 'create'),
		K = (function () {
			function t() {}
			return function (r) {
				if (!xt(r)) return {}
				if (k) return k(r)
				t.prototype = r
				var e = new t()
				return (t.prototype = void 0), e
			}
		})()
	function Q(t) {
		var r = -1,
			e = null == t ? 0 : t.length
		for (this.clear(); ++r < e; ) {
			var n = t[r]
			this.set(n[0], n[1])
		}
	}
	function X(t) {
		var r = -1,
			e = null == t ? 0 : t.length
		for (this.clear(); ++r < e; ) {
			var n = t[r]
			this.set(n[0], n[1])
		}
	}
	function Y(t) {
		var r = -1,
			e = null == t ? 0 : t.length
		for (this.clear(); ++r < e; ) {
			var n = t[r]
			this.set(n[0], n[1])
		}
	}
	function Z(t) {
		var r = (this.__data__ = new X(t))
		this.size = r.size
	}
	function tt(t, r) {
		var e = Ot(t),
			n = !e && wt(t),
			o = !e && !n && At(t),
			i = !e && !n && !o && Ft(t),
			u = e || n || o || i,
			c = u
				? (function (t, r) {
						for (var e = -1, n = Array(t); ++e < t; ) n[e] = r(e)
						return n
					})(t.length, String)
				: [],
			a = c.length
		for (var f in t)
			(!r && !F.call(t, f)) ||
				(u && ('length' == f || (o && ('offset' == f || 'parent' == f)) || (i && ('buffer' == f || 'byteLength' == f || 'byteOffset' == f)) || dt(f, a))) ||
				c.push(f)
		return c
	}
	function rt(t, r, e) {
		;((void 0 !== e && !jt(t[r], e)) || (void 0 === e && !(r in t))) && ot(t, r, e)
	}
	function et(t, r, e) {
		var n = t[r]
		;(F.call(t, r) && jt(n, e) && (void 0 !== e || r in t)) || ot(t, r, e)
	}
	function nt(t, r) {
		for (var e = t.length; e--; ) if (jt(t[e][0], r)) return e
		return -1
	}
	function ot(t, r, e) {
		'__proto__' == r && R ? R(t, r, { configurable: !0, enumerable: !0, value: e, writable: !0 }) : (t[r] = e)
	}
	;(Q.prototype.clear = function () {
		;(this.__data__ = J ? J(null) : {}), (this.size = 0)
	}),
		(Q.prototype.delete = function (t) {
			var r = this.has(t) && delete this.__data__[t]
			return (this.size -= r ? 1 : 0), r
		}),
		(Q.prototype.get = function (t) {
			var r = this.__data__
			if (J) {
				var n = r[t]
				return n === e ? void 0 : n
			}
			return F.call(r, t) ? r[t] : void 0
		}),
		(Q.prototype.has = function (t) {
			var r = this.__data__
			return J ? void 0 !== r[t] : F.call(r, t)
		}),
		(Q.prototype.set = function (t, r) {
			var n = this.__data__
			return (this.size += this.has(t) ? 0 : 1), (n[t] = J && void 0 === r ? e : r), this
		}),
		(X.prototype.clear = function () {
			;(this.__data__ = []), (this.size = 0)
		}),
		(X.prototype.delete = function (t) {
			var r = this.__data__,
				e = nt(r, t)
			return !(e < 0) && (e == r.length - 1 ? r.pop() : N.call(r, e, 1), --this.size, !0)
		}),
		(X.prototype.get = function (t) {
			var r = this.__data__,
				e = nt(r, t)
			return e < 0 ? void 0 : r[e][1]
		}),
		(X.prototype.has = function (t) {
			return nt(this.__data__, t) > -1
		}),
		(X.prototype.set = function (t, r) {
			var e = this.__data__,
				n = nt(e, t)
			return n < 0 ? (++this.size, e.push([t, r])) : (e[n][1] = r), this
		}),
		(Y.prototype.clear = function () {
			;(this.size = 0), (this.__data__ = { hash: new Q(), map: new (H || X)(), string: new Q() })
		}),
		(Y.prototype.delete = function (t) {
			var r = _t(this, t).delete(t)
			return (this.size -= r ? 1 : 0), r
		}),
		(Y.prototype.get = function (t) {
			return _t(this, t).get(t)
		}),
		(Y.prototype.has = function (t) {
			return _t(this, t).has(t)
		}),
		(Y.prototype.set = function (t, r) {
			var e = _t(this, t),
				n = e.size
			return e.set(t, r), (this.size += e.size == n ? 0 : 1), this
		}),
		(Z.prototype.clear = function () {
			;(this.__data__ = new X()), (this.size = 0)
		}),
		(Z.prototype.delete = function (t) {
			var r = this.__data__,
				e = r.delete(t)
			return (this.size = r.size), e
		}),
		(Z.prototype.get = function (t) {
			return this.__data__.get(t)
		}),
		(Z.prototype.has = function (t) {
			return this.__data__.has(t)
		}),
		(Z.prototype.set = function (t, r) {
			var e = this.__data__
			if (e instanceof X) {
				var n = e.__data__
				if (!H || n.length < 199) return n.push([t, r]), (this.size = ++e.size), this
				e = this.__data__ = new Y(n)
			}
			return e.set(t, r), (this.size = e.size), this
		})
	var it,
		ut = function (t, r, e) {
			for (var n = -1, o = Object(t), i = e(t), u = i.length; u--; ) {
				var c = i[it ? u : ++n]
				if (!1 === r(o[c], c, o)) break
			}
			return t
		}
	function ct(t) {
		return null == t
			? void 0 === t
				? '[object Undefined]'
				: '[object Null]'
			: L && L in Object(t)
				? (function (t) {
						var r = F.call(t, L),
							e = t[L]
						try {
							t[L] = void 0
							var n = !0
						} catch (t) {}
						var o = S.call(t)
						n && (r ? (t[L] = e) : delete t[L])
						return o
					})(t)
				: (function (t) {
						return S.call(t)
					})(t)
	}
	function at(t) {
		return Ct(t) && ct(t) == o
	}
	function ft(t) {
		return (
			!(
				!xt(t) ||
				(function (t) {
					return !!U && U in t
				})(t)
			) &&
			(zt(t) ? P : a).test(
				(function (t) {
					if (null != t) {
						try {
							return C.call(t)
						} catch (t) {}
						try {
							return t + ''
						} catch (t) {}
					}
					return ''
				})(t)
			)
		)
	}
	function st(t) {
		if (!xt(t))
			return (function (t) {
				var r = []
				if (null != t) for (var e in Object(t)) r.push(e)
				return r
			})(t)
		var r = yt(t),
			e = []
		for (var n in t) ('constructor' != n || (!r && F.call(t, n))) && e.push(n)
		return e
	}
	function lt(t, r, e, n, o) {
		t !== r &&
			ut(
				r,
				function (i, u) {
					if ((o || (o = new Z()), xt(i)))
						!(function (t, r, e, n, o, i, u) {
							var a = gt(t, e),
								f = gt(r, e),
								s = u.get(f)
							if (s) return void rt(t, e, s)
							var l = i ? i(a, f, e + '', t, r, u) : void 0,
								h = void 0 === l
							if (h) {
								var p = Ot(f),
									_ = !p && At(f),
									v = !p && !_ && Ft(f)
								;(l = f),
									p || _ || v
										? Ot(a)
											? (l = a)
											: Ct((j = a)) && mt(j)
												? (l = (function (t, r) {
														var e = -1,
															n = t.length
														r || (r = Array(n))
														for (; ++e < n; ) r[e] = t[e]
														return r
													})(a))
												: _
													? ((h = !1),
														(l = (function (t, r) {
															if (r) return t.slice()
															var e = t.length,
																n = $ ? $(e) : new t.constructor(e)
															return t.copy(n), n
														})(f, !0)))
													: v
														? ((h = !1),
															(d = f),
															(y = !0 ? ((g = d.buffer), (b = new g.constructor(g.byteLength)), new E(b).set(new E(g)), b) : d.buffer),
															(l = new d.constructor(y, d.byteOffset, d.length)))
														: (l = [])
										: (function (t) {
													if (!Ct(t) || ct(t) != c) return !1
													var r = D(t)
													if (null === r) return !0
													var e = F.call(r, 'constructor') && r.constructor
													return 'function' == typeof e && e instanceof e && C.call(e) == I
											  })(f) || wt(f)
											? ((l = a),
												wt(a)
													? (l = (function (t) {
															return (function (t, r, e, n) {
																var o = !e
																e || (e = {})
																var i = -1,
																	u = r.length
																for (; ++i < u; ) {
																	var c = r[i],
																		a = n ? n(e[c], t[c], c, e, t) : void 0
																	void 0 === a && (a = t[c]), o ? ot(e, c, a) : et(e, c, a)
																}
																return e
															})(t, Ut(t))
														})(a))
													: (xt(a) && !zt(a)) ||
														(l = (function (t) {
															return 'function' != typeof t.constructor || yt(t) ? {} : K(D(t))
														})(f)))
											: (h = !1)
							}
							var d, y, g, b
							var j
							h && (u.set(f, l), o(l, f, n, i, u), u.delete(f))
							rt(t, e, l)
						})(t, r, u, e, lt, n, o)
					else {
						var a = n ? n(gt(t, u), i, u + '', t, r, o) : void 0
						void 0 === a && (a = i), rt(t, u, a)
					}
				},
				Ut
			)
	}
	function ht(t, r) {
		return bt(
			(function (t, r, e) {
				return (
					(r = V(void 0 === r ? t.length - 1 : r, 0)),
					function () {
						for (var n = arguments, o = -1, i = V(n.length - r, 0), u = Array(i); ++o < i; ) u[o] = n[r + o]
						o = -1
						for (var c = Array(r + 1); ++o < r; ) c[o] = n[o]
						return (c[r] = e(u)), j(t, this, c)
					}
				)
			})(t, r, Pt),
			t + ''
		)
	}
	var pt = R
		? function (t, r) {
				return R(t, 'toString', {
					configurable: !0,
					enumerable: !1,
					value:
						((e = r),
						function () {
							return e
						}),
					writable: !0
				})
				var e
			}
		: Pt
	function _t(t, r) {
		var e,
			n,
			o = t.__data__
		return ('string' == (n = typeof (e = r)) || 'number' == n || 'symbol' == n || 'boolean' == n ? '__proto__' !== e : null === e)
			? o['string' == typeof r ? 'string' : 'hash']
			: o.map
	}
	function vt(t, r) {
		var e = (function (t, r) {
			return null == t ? void 0 : t[r]
		})(t, r)
		return ft(e) ? e : void 0
	}
	function dt(t, r) {
		var e = typeof t
		return !!(r = null == r ? n : r) && ('number' == e || ('symbol' != e && f.test(t))) && t > -1 && t % 1 == 0 && t < r
	}
	function yt(t) {
		var r = t && t.constructor
		return t === (('function' == typeof r && r.prototype) || M)
	}
	function gt(t, r) {
		if (('constructor' !== r || 'function' != typeof t[r]) && '__proto__' != r) return t[r]
	}
	var bt = (function (t) {
		var r = 0,
			e = 0
		return function () {
			var n = W(),
				o = 16 - (n - e)
			if (((e = n), o > 0)) {
				if (++r >= 800) return arguments[0]
			} else r = 0
			return t.apply(void 0, arguments)
		}
	})(pt)
	function jt(t, r) {
		return t === r || (t != t && r != r)
	}
	var wt = at(
			(function () {
				return arguments
			})()
		)
			? at
			: function (t) {
					return Ct(t) && F.call(t, 'callee') && !B.call(t, 'callee')
				},
		Ot = Array.isArray
	function mt(t) {
		return null != t && Mt(t.length) && !zt(t)
	}
	var At =
		G ||
		function () {
			return !1
		}
	function zt(t) {
		if (!xt(t)) return !1
		var r = ct(t)
		return r == u || '[object GeneratorFunction]' == r || '[object AsyncFunction]' == r || '[object Proxy]' == r
	}
	function Mt(t) {
		return 'number' == typeof t && t > -1 && t % 1 == 0 && t <= n
	}
	function xt(t) {
		var r = typeof t
		return null != t && ('object' == r || 'function' == r)
	}
	function Ct(t) {
		return null != t && 'object' == typeof t
	}
	var Ft = b
		? (function (t) {
				return function (r) {
					return t(r)
				}
			})(b)
		: function (t) {
				return Ct(t) && Mt(t.length) && !!s[ct(t)]
			}
	function Ut(t) {
		return mt(t) ? tt(t, !0) : st(t)
	}
	var St,
		It =
			((St = function (t, r, e) {
				lt(t, r, e)
			}),
			ht(function (t, r) {
				var e = -1,
					n = r.length,
					o = n > 1 ? r[n - 1] : void 0,
					i = n > 2 ? r[2] : void 0
				for (
					o = St.length > 3 && 'function' == typeof o ? (n--, o) : void 0,
						i &&
							(function (t, r, e) {
								if (!xt(e)) return !1
								var n = typeof r
								return !!('number' == n ? mt(e) && dt(r, e.length) : 'string' == n && (r in e)) && jt(e[r], t)
							})(r[0], r[1], i) &&
							((o = n < 3 ? void 0 : o), (n = 1)),
						t = Object(t);
					++e < n;

				) {
					var u = r[e]
					u && St(t, u, e, o)
				}
				return t
			}))
	function Pt(t) {
		return t
	}
	t.exports = It
})
const c = Object.prototype.hasOwnProperty,
	a = (t, r) => c.call(t, r)
class f {
	constructor({ pluginId: t, defaultConfig: r = {}, customMerge: e, root: n }) {
		;(this.pluginId = t), (this.defaultConfig = r), (this.pluginConfigPath = o.default.resolve(n || __dirname, t)), (this.customMerge = e), (this._config = void 0)
	}
	resolve(t) {
		return o.default.resolve(this.pluginConfigPath, t)
	}
	hasFile(t) {
		return n.default.existsSync(this.resolve(t))
	}
	requireFile(t) {
		try {
			return require(this.resolve(t))
		} catch (t) {
			if ('MODULE_NOT_FOUND' === t.code) return
			throw t
		}
	}
	_getUserConfig() {
		return this.requireFile('config.json')
	}
	config(t, r) {
		if (!this._config) {
			const t = this._getUserConfig()
			this._config = Array.isArray(t) ? t : (this.customMerge || u)(this.defaultConfig, t)
		}
		let e = this._config
		return t
			? (function (t, r, e) {
					if ('number' == typeof r) return t[r]
					if ('symbol' == typeof r) return a(t, r) ? t[r] : e
					const n = 'string' != typeof (o = r) ? o : o.split('.').reduce((t, r) => (r.split(/\[([^}]+)\]/g).forEach(r => r && t.push(r)), t), [])
					var o
					let i = t
					for (let t = 0; t < n.length; t++) {
						const r = n[t]
						if (!a(i, r)) return e
						i = i[r]
					}
					return i
				})(e, t, r)
			: e
	}
}
const s = new (class {
	constructor() {
		this._configMap = new Map()
	}
	plugin({ pluginId: t, defaultConfig: r, customMerge: e, root: n = __dirname, cache: o = !0 }) {
		if (this._configMap.has(t) && o) return this._configMap.get(t)
		const i = new f({ pluginId: t, defaultConfig: r, customMerge: e, root: n })
		return o && this._configMap.set(t, i), i
	}
})()
var l = s.plugin.bind(s)
module.exports = l
